// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 开始：构建！appengine 

// 包微妙实现的函数通常在加密
// 代码中有用，但需要仔细考虑才能正确使用。这是歌朗的一面镜子。org/x/crypto/internal/微妙。
package subtle // 导入“加密/内部/微妙”

import "unsafe"

// AnyOverlap报告x和y是否在任何（不一定是
// 对应的）索引上共享内存。超过切片长度的内存将被忽略。
func AnyOverlap(x, y []byte) bool {
	return len(x) > 0 && len(y) > 0 &&
		uintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) &&
		uintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1]))
}

// IncactorVerlap报告x和y是否在任何不对应的
// 索引上共享内存。超过切片长度的内存将被忽略。请注意，x和y可以
// 具有不同的长度，但仍然没有任何不精确的重叠。
// 
// IncactorVerLap可用于实现加密/密码
// AEAD、块、块模式和流接口的要求。
func InexactOverlap(x, y []byte) bool {
	if len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {
		return false
	}
	return AnyOverlap(x, y)
}
